package com.rookieci.plugin.core;

import android.app.Activity;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;

import androidx.appcompat.app.AppCompatActivity;

/**
 * Created by 磁磁帅 on 2023/4/27 0027.
 * 功能：
 */

//插件化路由框架
//所有的插件类启动都是调用这个方法，通过在intent
//添加哦 className 传递要启动activity的全路径。
//使用AppCompatActivity会闪退，比较无奈
public class PluginActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstance) {
        super.onCreate(savedInstance);
        String className = getIntent().getStringExtra("className");
        try {
            //通过全路径解析出class
            Class<?> aClass = PluginManager.getInstance().getDexClassLoader().loadClass(className);
            //实例化这个class
            Object activity = aClass.newInstance();
            if (activity instanceof BaseActivity) {
                //这里就判断了非继承自BaseActivity的插件将不能启动
                PluginInterface instance = (PluginInterface) activity;
                //把上下文传给BaseActivity,方便插件类调用上下文
                instance.attach(PluginActivity.this);
                //启动插件类的onCreate()方法。
                instance.onCreate(savedInstance);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public ClassLoader getClassLoader() {
        return PluginManager.getInstance().getDexClassLoader();
    }

    @Override
    public Resources getResources() {
        return PluginManager.getInstance().getResources();
    }

    @Override
    public void startActivity(Intent intent) {
        String className = intent.getStringExtra("className");
        //注意这里哦，我们是启动了自己,className存放了我们要启动的类的全路径
        Intent i = new Intent(PluginActivity.this, PluginActivity.class);
        i.putExtra("className", className);
        super.startActivity(i);
    }
}

